package domean;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JLabel;

public class Spielfeld {
	
	private int zellenRadius = 20;
	
	private int[] zellenKoordinaten = {400, 30, 440, 35, 480, 45, 516, 63, 549, 86, 577, 115, 600, 149, 617, 186, 628, 226, 632, 266, 
			628, 306, 617, 345, 600, 382, 577, 415, 549, 446, 516, 471, 480, 490, 440, 505, 400, 509,
			360, 505, 320, 490, 284, 471, 251, 446, 223, 415, 200, 382, 183, 345, 172, 306,
			168, 266, 172, 226, 183, 186, 200, 149, 223, 115, 251, 86, 284, 63, 320, 45, 360, 30};
	private int[] wissensstandsKoordinaten = {390, 95, 560, 260, 390, 450, 220, 260};
	private int startPositionen[][] = { {25,25,51,25,77,25},
			   {735,25,735,51,735,77},
			   {25,460,25,485,25,510},
			   {715,510,740,510,690,510}};
	private int[] labelPos = {25, 50, 650, 40, 55, 480, 690, 470};
	
	private SpielfeldZelle[] zellen;
	private Wissensstandsanzeiger[] anzeiger;
	private Spieler[] spieler;
	private JLabel[] spielerLabels;

	public Spielfeld(Spieler[] spieler){
		this.spieler = spieler;
		initialisiereSpielfeldzellen();
		erstelleWissensstandsanzeiger();
		erstelleStreiter(spieler);
		erstelleSpielerLabels(spieler);
	}

	private void initialisiereSpielfeldzellen() {
		anzeiger = new Wissensstandsanzeiger[4];
		spielerLabels = new JLabel[4];
		zellen = new SpielfeldZelle[zellenKoordinaten.length/2];
		int j = 0;
		for(int i = 0; i <= (zellenKoordinaten.length - 1); i+=2){
			zellen[j] = new SpielfeldZelle(zellenKoordinaten[i], zellenKoordinaten[i+1], zellenRadius, false, Color.white);
			zellen[j].setFeldFarbe(Color.WHITE);
			j++;
		}
		zellen[0].setStartFeld(true);
		zellen[0].setFeldFarbe(new Color(164, 189, 230));
		zellen[9].setStartFeld(true);
		zellen[9].setFeldFarbe(new Color(254, 150, 147));
		zellen[18].setStartFeld(true);
		zellen[18].setFeldFarbe(new Color(255, 255, 149));
		zellen[27].setStartFeld(true);
		zellen[27].setFeldFarbe(new Color(161, 226, 172));
	}

	public void erstelleWissensstandsanzeiger() {
		int j = 0;
		for(int i = 0; i < 4; i++){
			anzeiger[i] = new Wissensstandsanzeiger(wissensstandsKoordinaten[j], wissensstandsKoordinaten[j+1]);
			j+=2;
		}
	}

	public void erstelleStreiter(Spieler[] spieler) {
		int[] startfelder = {0,9,18,27};
		for(int i = 0; i < 4; i++){
			spieler[i] = new Spieler(startPositionen[i]);
			spieler[i].setStartfeld(startfelder[i]);
		}
	}
	
	public void erstelleSpielerLabels(Spieler[] spieler){
		
		int j = 0;
		for(int i = 0; i < 4; i++){
			Font font = new Font("Verdana", Font.BOLD, 16);
			spielerLabels[i] = new JLabel(spieler[i].getName());
			spielerLabels[i].setFont(font);
			spielerLabels[i].setForeground(Color.white);
			spielerLabels[i].setSize(new Dimension(150, 30));
			spielerLabels[i].setLocation(labelPos[j], labelPos[j+1]);
			j+=2;
		}
	}
	
	/**
	 * getter fuer <code>{@link #zellen}</code>
	 */
	public SpielfeldZelle[] getZellen() {
		return zellen;
	}

	/**
	 *  setter fuer <code>{@link #zellen}</code>
	 */
	public void setZellen(SpielfeldZelle[] zellen) {
		this.zellen = zellen;
	}
	
	
	/**
	 * getter fuer <code>{@link #anzeiger}</code>
	 */
	public Wissensstandsanzeiger[] getAnzeiger() {
		return anzeiger;
	}

	/**
	 *  setter fuer <code>{@link #anzeiger}</code>
	 */
	public void setAnzeiger(Wissensstandsanzeiger[] anzeiger) {
		this.anzeiger = anzeiger;
	}
	
	public void erhoeheAnzeiger(int spieler, int kategorie){
		this.anzeiger[spieler].erhoeheWissenstandsanzeiger(kategorie);
	}
	
	public void erniedrigeAnzeiger(int spieler, int kategorie){
		this.anzeiger[spieler].erniedrigeWissenstandsanzeiger(kategorie);
	}

	/**
	 * getter fuer <code>{@link #spieler}</code>
	 */
	public Spieler[] getSpieler() {
		return spieler;
	}

	/**
	 *  setter fuer <code>{@link #spieler}</code>
	 */
	public void setSpieler(Spieler[] spieler) {
		this.spieler = spieler;
	}

	public JLabel[] getSpielerLabels() {
		return this.spielerLabels;
	}

	public void setzeSpielerLabel(int spieler, String name){
		this.spielerLabels[spieler].setText(name);
	}
	
}
